package com.jiangruan.javaproject.request;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map;
import java.util.Set;

/**
 * @author:SAVA ME(未蒙救赎)
 * @email:1902586238@qq.com
 * @desc:该类用于封装提供网络请求的代码，用于发起网络请求并将网络请求的数据进行返回
 * @datetime:2021/12/20 21:09
 **/
public class HttpUtils {
    /**
     * 该函数用于get请求，并将请求的结果进行返回
     * @param path 请求的资源路径
     * @return 请求的结果
     */
    public static String git(String path) {
        InputStream inputStream = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        String Line = "";//最开始的空行
        String result = "";//每次读取到以后都要累计起来的读取结果
        try {
            //Union Resource Location 统一资源定位
            URL url = new URL(path);
            URLConnection con =  url.openConnection();
            //进行链接
            con.connect();

            inputStream = con.getInputStream();

            //字符流：
            inputStreamReader = new InputStreamReader(inputStream);
            reader = new BufferedReader(inputStreamReader);
            //readerLine读一行

            while ((Line = reader.readLine()) != null){
                result += Line;
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭读取流
            try {
                if (reader != null) {
                    reader.close();
                }if (inputStreamReader != null){
                    inputStreamReader.close();
                }if (inputStream != null){
                    inputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 封装的用Java实现的past原生的请求
     * @param path 请求的路径
     * @param header 请求头设置信息
     * @param data 请求数据
     * @return 请求的响应结果
     */
    public static String post(String path, Map<String,String> header,byte[] data){
        OutputStream outputStream = null;
        BufferedReader reader =null;
        String result = "";//result表示最后要返回的数据
        try {
            URL url = new URL(path);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();

            con.setRequestMethod("POST");//设置请求类型

            //设置可以发送的数据和接收数据
            con.setDoInput(true);
            con.setDoOutput(true);

            //设置请求头属性
            //ContentType：application/json
            //Authorization："Basic" + base64(用户信息)
            if (!header.isEmpty()){//header不为空
                //将header中的数据遍历，设置到请求头当中
                //如何遍历map？
                //如何拿到map中的所以的key
                Set<String> keys = header.keySet();
                //如何遍历set？ foreach，迭代器iterator
                for (String key: keys){
                    String value = header.get(key);
                    con.setRequestProperty(key,value);
                }
            }

            con.connect();

            //把请求数据发送到请求的服务端去
             outputStream = con.getOutputStream();
             outputStream.write(data);
             outputStream.flush();

             //等待接收返回的数据
             reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
             String line = null;
             while ((line = reader.readLine()) != null){
                 result += line;
             }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if (reader != null){
                    reader.close();
                }
                if (outputStream != null){
                    outputStream.close();
                }

            }catch (IOException e){
                e.printStackTrace();
            }
        }
        return result;
    }
}
